Hypercubes exploration
The different dimensions of an hypercube can be analysed through different aggregation of the dimensions of the hypercubes, leading to different tables authorizing different modes of visualization. Each function is named according to the dimensions that are combined.
We start here from the situation of a researcher interested by the topic of human mobility and we load the hypercube elaborated in the previous section. We decide to analyze the topic without distinction between migrants and refugees.
hc <- readRDS("data/corpus/hc_mycorpus_states_mobil_month.RDS")
WHAT
The first question (WHAT) is the evaluation of the proportion of news related to the topic.
res_what <- what(hc = hc,
subtop = NA,
title = "Topic news")
res_what$table
res_what$plotly
The table indicate that 3154 news was associated to the topic which represent 2.72% of the total.
WHO.WHAT
The second question (WHO.WHAT) explore the variation of interest for the topic in the different media of the corpus.
Example
res_who_what<- who.what(hc=hc,
test = FALSE,
minsamp = 20,
mintest = 5,
title = "Topic news by media - Salience")
kable(res_who_what$table)
| fr_FRA_libera |
28827 |
607 |
0.0273 |
0.02106 |
0.7714286 |
42.08 |
1.00000 |
0.7714286 |
| fr_DZA_elwata |
11581 |
292 |
0.0273 |
0.02521 |
0.9234432 |
1.82 |
0.91137 |
0.9234432 |
| fr_BEL_derheu |
16358 |
349 |
0.0273 |
0.02134 |
0.7816850 |
21.69 |
1.00000 |
0.7816850 |
| fr_FRA_figaro |
22999 |
1005 |
0.0273 |
0.04370 |
1.6007326 |
232.26 |
0.00000 |
1.6007326 |
| fr_BEL_lesoir |
26057 |
652 |
0.0273 |
0.02502 |
0.9164835 |
5.01 |
0.98737 |
0.9164835 |
| fr_DZA_xpress |
9814 |
249 |
0.0273 |
0.02537 |
0.9293040 |
1.30 |
0.87310 |
0.9293040 |
res_who_what$plotly
res_who_what<- who.what(hc=hc,
test = TRUE,
minsamp = 5,
mintest = 1,
title = "Topic news by media - Significance")
res_who_what$plotly
NA
The analysis reveal a clear over-representation of the topic in the french newspaper Le Figaro (4.37% of news) as compared to the other media (2.1 to 2.5%).
WHEN.WHAT
The third question (WHEN.WHAT) is related to the evolution of the interest of all media from the corpus for the topic of interest through time.
Example
res_when_what<- when.what(hc=hc,
test=FALSE,
minsamp=10,
mintest=5,
title = "Topic news by month - Salience")
res_when_what$plotly
res_when_what<- when.what(hc=hc,
test=TRUE,
minsamp=10,
mintest=5,
title = "Topic news by month - Significance")
res_when_what$plotly
The analysis reveals clear discontinuities in the timeline of the topic. We start with a low level (0.5 to 1.2%) from January 2014 to March 2015, followed by a brutal jump in April-June 2015 (3 to 5%) and a major peak in september 2015 (15.8% of news). At the end of the period, the level is clearly higher than at the beginning.
WHERE.WHAT
The fourth question (WHERE.WHAT) analyze the countries that are the most associated to the topic of interest. We exclude therefore the news where no countries are mentioned and we analyze for each country the proportion of news that are associated to the topic.
Example
map<-readRDS("data/map/world_ctr_4326.Rdata")
hc2<-hc %>% filter(where1 !="_no_", where2 !="_no_")
res_where_what<- where.what(hc=hc2,
test=FALSE,
map = map,
minsamp=10,
mintest =5,
title = "Topic news by states - Salience")
res_where_what$plotly
res_where_what<- where.what(hc=hc2,
test=TRUE,
minsamp=10,
map = map,
mintest =5,
title = "Topic news by states - Significance")
res_where_what$plotly
The analysis reveals that some countries are “specialized” in the topic during the period of observation. For example 53.5% of the news about Hungary was associated to the question of migrants and refugees, which is obviously related to the mediatization of the wall established by Viktor Orban in 2015. Other countries are characterized on the contrary by an under-representation of the topic like the USA where the topic is only associated to 0.7% of news. But the situation will change after Donald Trump’s election who will also establish a wall which will dramatically increase the number of news about USA and migrants.
WHEN.WHO.WHAT
Despite our limited sample size, we can try to ask more complex question that combine three dimensions. We can for example examine the synchronization of media through time about the topic of interest (WHEN.WHO.WHAT).
Example
res_when_who_what<- when.who.what(hc=hc,
test = FALSE,
minsamp = 20,
mintest = 5,
title = "Topic news by month and by media - Salience")
res_when_who_what$plotly
res_when_who_what<- when.who.what(hc=hc,
test = TRUE,
minsamp = 20,
mintest = 5,
title = "Topic news by month and by media - Significance")
res_when_who_what$plotly
The figure reveals a global synchronization of media agenda concerning the topic, especially concerning the major peak of interest located in september 2015. The first period of crisis of April 2015 is also visible in all media, with the exception of the belgian newspaper “Dernière Heure” which did not cover apparently the dramatic events of boat sinking in the Mediterranean more than usual. Another interesting difference can be observed for the two algerian newspapers that was characterized by an higher coverage of the topic during the year 2014.
WHERE.WHO.WHAT
Another example of combination of the three dimensions can be realized by exploring if some countries are more mentioned by some media in relation with the topic of interest. In other words, do we observe a geographic synchronization of the agenda of media.
Example
hc2<-hc %>% filter(where1 !="_no_", where2 !="_no_") %>% mutate(who=substr(who,4,6))
res_where_who_what<- where.who.what(hc= hc2,
maxloc= 10,
test=FALSE,
minsamp=5,
mintest=2,
title = "Topic news by media and by states - Salience")
res_where_who_what$plotly
res_where_who_what<- where.who.what(hc= hc2,
maxloc= 10,
test=TRUE,
minsamp=5,
mintest=2,
title = "Topic news by media and by states - Salience")
res_where_who_what$plotly
NA
The analyse reveals that some countries are systematically associated to the topic by all media like Turkey or Greece. But other countries like Syria are associated to variable patterns of interest in relation with the topic: it is clearly more associated in Algeria, neutral in Belgium and less associated in France.
WHEN.WHERE.WHAT
The last case of combination of three dimensions concerns the time variation of the association between the topics and the countries through time. It can typically reveal the effect of dramatic event occuring in one country at a period of time. Unfortunately, the sample is too limited in size for an in depth exploration of crisis and we are obliged to limit our example to the comparison of the 8 quarters of years.
Function
Example
hc2<-hc %>% filter(where1 !="_no_", where2 !="_no_") %>% mutate(when=cut(when, breaks="quarte"))
res_when_where_what<- when.where.what(hc=hc2,
maxloc= 10,
test=FALSE,
minsamp=5,
mintest=2,
title = "Topic news by year and by states - Salience")
res_when_where_what$plotly
res_when_where_what<- when.where.what(hc=hc2,
maxloc= 10,
test=TRUE,
minsamp=5,
mintest=2,
title = "Topic news by year and by states - Significance")
res_when_where_what$plotly
NA
The analysis confirms that in the majority of case, the most important association of countries with the topic took place in 2015 with a major peak in the third quarter (August-September-October). But some interesting exceptions can be observed, in particular in the case of Italy which was associated earlier to the question of migrants and refugees. But the analysis is difficult here because of the too important level of time aggregation.
LS0tCnRpdGxlOiAiR2VvZ3JhcGhpY2FsIGFuYWx5c2lzIG9mIG1lZGlhIgpzdWJ0aXRsZTogIjUuIEh5cGVyY3ViZXMgZXhwbG9yYXRpb24iCmF1dGhvcjogIkNsYXVkZSBHcmFzbGFuZCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyIHNldHVwMiwgZWNobyA9IEZBTFNFLCAgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSkKc291cmNlKCJwZ20vaHlwZXJuZXdzX2Z1bmN0aW9uc19WNi5SIikKYGBgCgoKCgojIEh5cGVyY3ViZXMgZXhwbG9yYXRpb24KClRoZSBkaWZmZXJlbnQgZGltZW5zaW9ucyBvZiBhbiBoeXBlcmN1YmUgY2FuIGJlIGFuYWx5c2VkIHRocm91Z2ggZGlmZmVyZW50IGFnZ3JlZ2F0aW9uIG9mIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBoeXBlcmN1YmVzLCBsZWFkaW5nIHRvIGRpZmZlcmVudCB0YWJsZXMgYXV0aG9yaXppbmcgZGlmZmVyZW50IG1vZGVzIG9mIHZpc3VhbGl6YXRpb24uIEVhY2ggZnVuY3Rpb24gaXMgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBkaW1lbnNpb25zIHRoYXQgYXJlIGNvbWJpbmVkLiAKCldlIHN0YXJ0IGhlcmUgZnJvbSB0aGUgc2l0dWF0aW9uIG9mIGEgcmVzZWFyY2hlciBpbnRlcmVzdGVkIGJ5IHRoZSB0b3BpYyBvZiBodW1hbiBtb2JpbGl0eSBhbmQgd2UgbG9hZCB0aGUgaHlwZXJjdWJlIGVsYWJvcmF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uIFdlIGRlY2lkZSB0byBhbmFseXplIHRoZSB0b3BpYyB3aXRob3V0IGRpc3RpbmN0aW9uIGJldHdlZW4gbWlncmFudHMgYW5kIHJlZnVnZWVzLiAKCmBgYHtyfQpoYyA8LSByZWFkUkRTKCJkYXRhL2NvcnB1cy9oY19teWNvcnB1c19zdGF0ZXNfbW9iaWxfbW9udGguUkRTIikKYGBgCgojIyBXSEFUCgpUaGUgZmlyc3QgcXVlc3Rpb24gKFdIQVQpIGlzIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBwcm9wb3J0aW9uIG9mIG5ld3MgcmVsYXRlZCB0byB0aGUgdG9waWMuCgpgYGB7ciAsd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0V9CnJlc193aGF0IDwtIHdoYXQoaGMgPSBoYywKICAgICAgICAgICAgIHN1YnRvcCA9IE5BLAogICAgICAgICAgICAgdGl0bGUgPSAiVG9waWMgbmV3cyIpCnJlc193aGF0JHRhYmxlCnJlc193aGF0JHBsb3RseQpgYGAKClRoZSB0YWJsZSBpbmRpY2F0ZSB0aGF0IDMxNTQgbmV3cyB3YXMgYXNzb2NpYXRlZCB0byB0aGUgdG9waWMgd2hpY2ggcmVwcmVzZW50IDIuNzIlIG9mIHRoZSB0b3RhbC4KCgoKIyMgV0hPLldIQVQKClRoZSBzZWNvbmQgcXVlc3Rpb24gKFdITy5XSEFUKSBleHBsb3JlIHRoZSB2YXJpYXRpb24gb2YgaW50ZXJlc3QgZm9yIHRoZSB0b3BpYyBpbiB0aGUgZGlmZmVyZW50IG1lZGlhIG9mIHRoZSBjb3JwdXMuCgoKIyMjIEV4YW1wbGUKCmBgYHtyIHdoby53aGF0IGV4YW1wbGUsd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0V9CgoKcmVzX3dob193aGF0PC0gd2hvLndoYXQoaGM9aGMsIAogICAgICAgICAgICAgICAgICAgICAgICB0ZXN0ID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNhbXAgPSAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgbWludGVzdCA9IDUsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIlRvcGljIG5ld3MgYnkgbWVkaWEgLSBTYWxpZW5jZSIpCgprYWJsZShyZXNfd2hvX3doYXQkdGFibGUpCnJlc193aG9fd2hhdCRwbG90bHkgCgpyZXNfd2hvX3doYXQ8LSB3aG8ud2hhdChoYz1oYywgCiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICBtaW5zYW1wID0gNSwKICAgICAgICAgICAgICAgICAgICAgICAgbWludGVzdCA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIlRvcGljIG5ld3MgYnkgbWVkaWEgLSBTaWduaWZpY2FuY2UiKQpyZXNfd2hvX3doYXQkcGxvdGx5CgpgYGAKClRoZSBhbmFseXNpcyByZXZlYWwgYSBjbGVhciBvdmVyLXJlcHJlc2VudGF0aW9uIG9mIHRoZSB0b3BpYyBpbiB0aGUgZnJlbmNoIG5ld3NwYXBlciAqTGUgRmlnYXJvKiAoNC4zNyUgb2YgbmV3cykgYXMgY29tcGFyZWQgdG8gdGhlIG90aGVyIG1lZGlhICgyLjEgdG8gMi41JSkuIAoKCiMjIFdIRU4uV0hBVAoKVGhlIHRoaXJkIHF1ZXN0aW9uIChXSEVOLldIQVQpIGlzIHJlbGF0ZWQgdG8gdGhlIGV2b2x1dGlvbiBvZiB0aGUgaW50ZXJlc3Qgb2YgYWxsIG1lZGlhIGZyb20gdGhlIGNvcnB1cyBmb3IgdGhlIHRvcGljIG9mIGludGVyZXN0IHRocm91Z2ggdGltZS4KCgojIyMgRXhhbXBsZQoKYGBge3Igd2hlbi53aGF0IGV4YW1wbGUsd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0V9CgpyZXNfd2hlbl93aGF0PC0gd2hlbi53aGF0KGhjPWhjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0PUZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNhbXA9MTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWludGVzdD01LAogICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIlRvcGljIG5ld3MgYnkgbW9udGggLSBTYWxpZW5jZSIpCgpyZXNfd2hlbl93aGF0JHBsb3RseQoKCnJlc193aGVuX3doYXQ8LSB3aGVuLndoYXQoaGM9aGMsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5zYW1wPTEwLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnRlc3Q9NSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJUb3BpYyBuZXdzIGJ5IG1vbnRoIC0gU2lnbmlmaWNhbmNlIikKcmVzX3doZW5fd2hhdCRwbG90bHkKYGBgClRoZSBhbmFseXNpcyByZXZlYWxzIGNsZWFyIGRpc2NvbnRpbnVpdGllcyBpbiB0aGUgdGltZWxpbmUgb2YgdGhlIHRvcGljLiBXZSBzdGFydCB3aXRoIGEgbG93IGxldmVsICgwLjUgdG8gMS4yJSkgZnJvbSBKYW51YXJ5IDIwMTQgdG8gTWFyY2ggMjAxNSwgZm9sbG93ZWQgYnkgYSBicnV0YWwganVtcCBpbiBBcHJpbC1KdW5lIDIwMTUgKDMgdG8gNSUpIGFuZCBhIG1ham9yIHBlYWsgaW4gc2VwdGVtYmVyIDIwMTUgKDE1LjglIG9mIG5ld3MpLiBBdCB0aGUgZW5kIG9mIHRoZSBwZXJpb2QsIHRoZSBsZXZlbCBpcyBjbGVhcmx5IGhpZ2hlciB0aGFuIGF0IHRoZSBiZWdpbm5pbmcuICAKCiMjIFdIRVJFLldIQVQKCgpUaGUgZm91cnRoIHF1ZXN0aW9uIChXSEVSRS5XSEFUKSBhbmFseXplIHRoZSBjb3VudHJpZXMgdGhhdCBhcmUgdGhlIG1vc3QgYXNzb2NpYXRlZCB0byB0aGUgdG9waWMgb2YgaW50ZXJlc3QuIFdlIGV4Y2x1ZGUgdGhlcmVmb3JlIHRoZSBuZXdzIHdoZXJlIG5vIGNvdW50cmllcyBhcmUgbWVudGlvbmVkIGFuZCB3ZSBhbmFseXplIGZvciBlYWNoIGNvdW50cnkgdGhlIHByb3BvcnRpb24gb2YgbmV3cyB0aGF0IGFyZSBhc3NvY2lhdGVkIHRvIHRoZSB0b3BpYy4gCgoKIyMjIEV4YW1wbGUKCmBgYHtyIHdoZXJlLndoYXQgZXhhbXBsZSx3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0KbWFwPC1yZWFkUkRTKCJkYXRhL21hcC93b3JsZF9jdHJfNDMyNi5SZGF0YSIpCmhjMjwtaGMgJT4lIGZpbHRlcih3aGVyZTEgIT0iX25vXyIsIHdoZXJlMiAhPSJfbm9fIikKcmVzX3doZXJlX3doYXQ8LSB3aGVyZS53aGF0KGhjPWhjMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q9RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAgPSBtYXAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluc2FtcD0xMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnRlc3QgPTUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJUb3BpYyBuZXdzIGJ5IHN0YXRlcyAtIFNhbGllbmNlIikKcmVzX3doZXJlX3doYXQkcGxvdGx5CgpyZXNfd2hlcmVfd2hhdDwtIHdoZXJlLndoYXQoaGM9aGMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdD1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluc2FtcD0xMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCA9IG1hcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW50ZXN0ID01LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiVG9waWMgbmV3cyBieSBzdGF0ZXMgLSBTaWduaWZpY2FuY2UiKQpyZXNfd2hlcmVfd2hhdCRwbG90bHkKYGBgCgpUaGUgYW5hbHlzaXMgcmV2ZWFscyB0aGF0IHNvbWUgY291bnRyaWVzIGFyZSAic3BlY2lhbGl6ZWQiIGluIHRoZSB0b3BpYyBkdXJpbmcgdGhlIHBlcmlvZCBvZiBvYnNlcnZhdGlvbi4gRm9yIGV4YW1wbGUgNTMuNSUgb2YgdGhlIG5ld3MgYWJvdXQgSHVuZ2FyeSB3YXMgYXNzb2NpYXRlZCB0byB0aGUgcXVlc3Rpb24gb2YgbWlncmFudHMgYW5kIHJlZnVnZWVzLCB3aGljaCBpcyBvYnZpb3VzbHkgcmVsYXRlZCB0byB0aGUgbWVkaWF0aXphdGlvbiBvZiB0aGUgd2FsbCBlc3RhYmxpc2hlZCBieSBWaWt0b3IgT3JiYW4gaW4gMjAxNS4gT3RoZXIgY291bnRyaWVzIGFyZSBjaGFyYWN0ZXJpemVkIG9uIHRoZSBjb250cmFyeSBieSBhbiB1bmRlci1yZXByZXNlbnRhdGlvbiBvZiB0aGUgdG9waWMgbGlrZSB0aGUgVVNBIHdoZXJlIHRoZSB0b3BpYyBpcyBvbmx5IGFzc29jaWF0ZWQgdG8gMC43JSBvZiBuZXdzLiBCdXQgdGhlIHNpdHVhdGlvbiB3aWxsIGNoYW5nZSBhZnRlciBEb25hbGQgVHJ1bXAncyBlbGVjdGlvbiB3aG8gd2lsbCBhbHNvIGVzdGFibGlzaCBhIHdhbGwgd2hpY2ggd2lsbCBkcmFtYXRpY2FsbHkgaW5jcmVhc2UgdGhlIG51bWJlciBvZiBuZXdzIGFib3V0IFVTQSBhbmQgbWlncmFudHMuIAoKCiMjIFdIRU4uV0hPLldIQVQKCkRlc3BpdGUgb3VyIGxpbWl0ZWQgc2FtcGxlIHNpemUsIHdlIGNhbiB0cnkgdG8gYXNrIG1vcmUgY29tcGxleCBxdWVzdGlvbiB0aGF0IGNvbWJpbmUgdGhyZWUgZGltZW5zaW9ucy4gV2UgY2FuIGZvciBleGFtcGxlIGV4YW1pbmUgdGhlIHN5bmNocm9uaXphdGlvbiBvZiBtZWRpYSB0aHJvdWdoIHRpbWUgYWJvdXQgdGhlIHRvcGljIG9mIGludGVyZXN0IChXSEVOLldITy5XSEFUKS4KCgojIyMgRXhhbXBsZQoKYGBge3Igd2hlbi53aG8ud2hhdCBleGFtcGxlLHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFfQoKcmVzX3doZW5fd2hvX3doYXQ8LSB3aGVuLndoby53aGF0KGhjPWhjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluc2FtcCA9IDIwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWludGVzdCA9IDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJUb3BpYyBuZXdzIGJ5IG1vbnRoIGFuZCBieSBtZWRpYSAtIFNhbGllbmNlIikKcmVzX3doZW5fd2hvX3doYXQkcGxvdGx5CgpyZXNfd2hlbl93aG9fd2hhdDwtIHdoZW4ud2hvLndoYXQoaGM9aGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0ID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNhbXAgPSAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnRlc3QgPSA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiVG9waWMgbmV3cyBieSBtb250aCBhbmQgYnkgbWVkaWEgLSBTaWduaWZpY2FuY2UiKQpyZXNfd2hlbl93aG9fd2hhdCRwbG90bHkKYGBgCgpUaGUgZmlndXJlIHJldmVhbHMgYSBnbG9iYWwgc3luY2hyb25pemF0aW9uIG9mIG1lZGlhIGFnZW5kYSBjb25jZXJuaW5nIHRoZSB0b3BpYywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBtYWpvciBwZWFrIG9mIGludGVyZXN0IGxvY2F0ZWQgaW4gc2VwdGVtYmVyIDIwMTUuIFRoZSBmaXJzdCBwZXJpb2Qgb2YgY3Jpc2lzIG9mIEFwcmlsIDIwMTUgaXMgYWxzbyB2aXNpYmxlIGluIGFsbCBtZWRpYSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBiZWxnaWFuIG5ld3NwYXBlciAiRGVybmnDqHJlIEhldXJlIiB3aGljaCBkaWQgbm90IGNvdmVyIGFwcGFyZW50bHkgdGhlIGRyYW1hdGljIGV2ZW50cyBvZiBib2F0IHNpbmtpbmcgaW4gdGhlIE1lZGl0ZXJyYW5lYW4gbW9yZSB0aGFuIHVzdWFsLiBBbm90aGVyIGludGVyZXN0aW5nIGRpZmZlcmVuY2UgY2FuIGJlIG9ic2VydmVkIGZvciB0aGUgdHdvIGFsZ2VyaWFuIG5ld3NwYXBlcnMgdGhhdCB3YXMgY2hhcmFjdGVyaXplZCBieSBhbiBoaWdoZXIgY292ZXJhZ2Ugb2YgdGhlIHRvcGljIGR1cmluZyB0aGUgeWVhciAyMDE0LgoKCgojIyBXSEVSRS5XSE8uV0hBVAoKQW5vdGhlciBleGFtcGxlIG9mIGNvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSBkaW1lbnNpb25zIGNhbiBiZSByZWFsaXplZCBieSBleHBsb3JpbmcgaWYgc29tZSBjb3VudHJpZXMgYXJlIG1vcmUgbWVudGlvbmVkIGJ5IHNvbWUgbWVkaWEgaW4gcmVsYXRpb24gd2l0aCB0aGUgdG9waWMgb2YgaW50ZXJlc3QuIEluIG90aGVyIHdvcmRzLCBkbyB3ZSBvYnNlcnZlIGEgZ2VvZ3JhcGhpYyBzeW5jaHJvbml6YXRpb24gb2YgdGhlIGFnZW5kYSBvZiBtZWRpYS4gCgoKIyMjIEV4YW1wbGUKCmBgYHtyIHdoZXJlLndoby53aGF0IGV4YW1wbGUsd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0V9CmhjMjwtaGMgJT4lIGZpbHRlcih3aGVyZTEgIT0iX25vXyIsIHdoZXJlMiAhPSJfbm9fIikgJT4lIG11dGF0ZSh3aG89c3Vic3RyKHdobyw0LDYpKQpyZXNfd2hlcmVfd2hvX3doYXQ8LSB3aGVyZS53aG8ud2hhdChoYz0gaGMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsb2M9IDEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0PUZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5zYW1wPTUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnRlc3Q9MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiVG9waWMgbmV3cyBieSBtZWRpYSBhbmQgYnkgc3RhdGVzIC0gU2FsaWVuY2UiKQpyZXNfd2hlcmVfd2hvX3doYXQkcGxvdGx5CgpyZXNfd2hlcmVfd2hvX3doYXQ8LSB3aGVyZS53aG8ud2hhdChoYz0gaGMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsb2M9IDEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0PVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNhbXA9NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWludGVzdD0yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJUb3BpYyBuZXdzIGJ5IG1lZGlhIGFuZCBieSBzdGF0ZXMgLSBTYWxpZW5jZSIpCnJlc193aGVyZV93aG9fd2hhdCRwbG90bHkKCmBgYAoKVGhlIGFuYWx5c2UgcmV2ZWFscyB0aGF0IHNvbWUgY291bnRyaWVzIGFyZSBzeXN0ZW1hdGljYWxseSBhc3NvY2lhdGVkIHRvIHRoZSB0b3BpYyBieSBhbGwgbWVkaWEgbGlrZSBUdXJrZXkgb3IgR3JlZWNlLiBCdXQgb3RoZXIgY291bnRyaWVzIGxpa2UgU3lyaWEgYXJlIGFzc29jaWF0ZWQgdG8gdmFyaWFibGUgcGF0dGVybnMgb2YgaW50ZXJlc3QgaW4gcmVsYXRpb24gd2l0aCB0aGUgdG9waWM6IGl0IGlzIGNsZWFybHkgbW9yZSBhc3NvY2lhdGVkIGluIEFsZ2VyaWEsIG5ldXRyYWwgaW4gQmVsZ2l1bSBhbmQgbGVzcyBhc3NvY2lhdGVkIGluIEZyYW5jZS4gCgoKIyMgV0hFTi5XSEVSRS5XSEFUCgpUaGUgbGFzdCBjYXNlIG9mIGNvbWJpbmF0aW9uIG9mIHRocmVlIGRpbWVuc2lvbnMgY29uY2VybnMgdGhlIHRpbWUgdmFyaWF0aW9uIG9mIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSB0b3BpY3MgYW5kIHRoZSBjb3VudHJpZXMgdGhyb3VnaCB0aW1lLiBJdCBjYW4gdHlwaWNhbGx5IHJldmVhbCB0aGUgZWZmZWN0IG9mIGRyYW1hdGljIGV2ZW50IG9jY3VyaW5nIGluIG9uZSBjb3VudHJ5IGF0IGEgcGVyaW9kIG9mIHRpbWUuIFVuZm9ydHVuYXRlbHksIHRoZSBzYW1wbGUgaXMgdG9vIGxpbWl0ZWQgaW4gc2l6ZSBmb3IgYW4gaW4gZGVwdGggZXhwbG9yYXRpb24gb2YgY3Jpc2lzIGFuZCB3ZSBhcmUgb2JsaWdlZCB0byBsaW1pdCBvdXIgZXhhbXBsZSB0byB0aGUgY29tcGFyaXNvbiBvZiB0aGUgOCBxdWFydGVycyBvZiB5ZWFycy4KCiMjIyBGdW5jdGlvbgoKIyMjIEV4YW1wbGUKCmBgYHtyIHdoZW4ud2hlcmUud2hhdCBleGFtcGxlLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0KaGMyPC1oYyAlPiUgZmlsdGVyKHdoZXJlMSAhPSJfbm9fIiwgd2hlcmUyICE9Il9ub18iKSAlPiUgbXV0YXRlKHdoZW49Y3V0KHdoZW4sIGJyZWFrcz0icXVhcnRlIikpCnJlc193aGVuX3doZXJlX3doYXQ8LSB3aGVuLndoZXJlLndoYXQoaGM9aGMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsb2M9IDEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0PUZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5zYW1wPTUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnRlc3Q9MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiVG9waWMgbmV3cyBieSB5ZWFyIGFuZCBieSBzdGF0ZXMgLSBTYWxpZW5jZSIpCnJlc193aGVuX3doZXJlX3doYXQkcGxvdGx5CnJlc193aGVuX3doZXJlX3doYXQ8LSB3aGVuLndoZXJlLndoYXQoaGM9aGMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsb2M9IDEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0PVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNhbXA9NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWludGVzdD0yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJUb3BpYyBuZXdzIGJ5IHllYXIgYW5kIGJ5IHN0YXRlcyAtIFNpZ25pZmljYW5jZSIpCnJlc193aGVuX3doZXJlX3doYXQkcGxvdGx5CgpgYGAKClRoZSBhbmFseXNpcyBjb25maXJtcyB0aGF0IGluIHRoZSBtYWpvcml0eSBvZiBjYXNlLCB0aGUgbW9zdCBpbXBvcnRhbnQgYXNzb2NpYXRpb24gb2YgY291bnRyaWVzIHdpdGggdGhlIHRvcGljIHRvb2sgcGxhY2UgaW4gMjAxNSB3aXRoIGEgbWFqb3IgcGVhayBpbiB0aGUgdGhpcmQgcXVhcnRlciAoQXVndXN0LVNlcHRlbWJlci1PY3RvYmVyKS4gQnV0IHNvbWUgaW50ZXJlc3RpbmcgZXhjZXB0aW9ucyBjYW4gYmUgb2JzZXJ2ZWQsIGluIHBhcnRpY3VsYXIgaW4gdGhlIGNhc2Ugb2YgSXRhbHkgd2hpY2ggd2FzIGFzc29jaWF0ZWQgZWFybGllciB0byB0aGUgcXVlc3Rpb24gb2YgbWlncmFudHMgYW5kIHJlZnVnZWVzLiBCdXQgdGhlIGFuYWx5c2lzIGlzIGRpZmZpY3VsdCBoZXJlIGJlY2F1c2Ugb2YgdGhlIHRvbyBpbXBvcnRhbnQgbGV2ZWwgb2YgdGltZSBhZ2dyZWdhdGlvbi4gCgoKCgoKCgoKCgoKCgo=